class Solution {
public:
    int a[10];
bool isHappy(int n) {
  //进入一个无限循环
  int num = n;
  map<int, bool> m;
  do {
    //遍历num 把num里面每位都分离开加入哈希表中
    //把哈希表置空
    for (int i = 0; i < 10; ++i) {
      a[i] = 0;
    }
    int num2 = num;
    while (num2 > 0) {
      a[num2 % 10]++;
      num2 /= 10;
    }
    //现在 便利哈希表 把哈希表每一位的平方加起来
    int sum = 0;
    for (int i = 0; i < 10; ++i) {
      for (int j = 0; j < a[i]; ++j) {
        sum += i * i;
      }
    }
    //现在把sum赋值给num
    num = sum;
    if (num == 1) return true;
    auto it = m.find(num);
    if (it != m.end()) return false;
    m[num] = true;
    //目前的问题是如果出现无限循环怎么处理
  } while (num != n);

  return false;
}

};
